package com.lesso.lzh.sunflower.model;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableLogic;
import com.baomidou.mybatisplus.annotations.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.time.LocalDate;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("base_employee")
public class Employee extends BaseModel<Employee> {
    private static final long serialVersionUID = 1L;
    public static final String NAME = "name";

    /**
     * 员工工号（非空，长度20以内，数据库唯一索引）
     */
    @NotBlank(message = "员工工号不能为空")
    @Size(max = 20, message = "员工工号长度不能超过20个字符")
    @TableField("employee_no")
    private String employeeNo;

    /**
     * 员工姓名（非空，长度50以内）
     */
    @NotBlank(message = "员工姓名不能为空")
    @Size(max = 50, message = "员工姓名长度不能超过50个字符")
    private String name;

    /**
     * 身份证号（18位，数据库唯一索引，格式校验）
     */
    @Pattern(regexp = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$",
            message = "身份证号格式不正确")
    @TableField("id_card")
    private String idCard;

    /**
     * 手机号（11位数字，数据库唯一索引）
     */
    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
    private String phone;

    /**
     * 入职日期（非空，不能晚于当前日期）
     */
    @NotNull(message = "入职日期不能为空")
    @PastOrPresent(message = "入职日期不能晚于当前日期")
    @TableField("entry_date")
    private LocalDate entryDate;

    /**
     * 在职状态（1-在职，2-离职，非空）
     */
    @NotNull(message = "员工状态不能为空")
    @Pattern(regexp = "^[12]$", message = "员工状态只能为1（在职）或2（离职）")
    @TableField("employment_status")
    private Integer employmentStatus;

    /**
     * 删除标识：0-正常，1-删除（默认0）
     */
    @TableLogic
    @TableField("del_status")
    private Integer delStatus; // 可额外添加@Pattern注解限制取值范围
}